/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ec.edu.espe.distribuidas.ejemplomaven.web;

import ec.edu.espe.distribuidas.aseguradora.web.util.BotonesBean;
import ec.edu.espe.distribuidas.aseguradora.modelo.Cliente;
import ec.edu.espe.distribuidas.aseguradora.servicio.ClienteServicio;
import ec.edu.espe.distribuidas.aseguradora.web.util.MensajesGenericos;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import org.apache.commons.beanutils.BeanUtils;


/**
 *
 * @author alejandro
 */
@ManagedBean
@ViewScoped
public class ClienteBean extends BotonesBean{
    
    private static final String ENTIDAD = "Cliente";
    
    @EJB
    private ClienteServicio clienteServicio;
    
    
    private List<Cliente> clientes;
    private Cliente cliente;
    private Cliente clienteSeleccionado;
    
    @PostConstruct
    @Override
    public void postConstructor(){
        super.sinSeleccion();
        this.clientes=this.clienteServicio.obtenerTodos();
    }
    
    public void filaSeleccionada(ActionEvent evento) {
        if (clienteSeleccionado instanceof Cliente) {
            super.seleccionadoUno();
        } else {
            super.sinSeleccion();
        }
    }
    
    public void nuevo(){
        super.crear();
        this.cliente=new Cliente();
    }
    
    public void cargarTabla(){
        this.clientes=this.clienteServicio.obtenerTodos();
    }
    
    public void modificar(){
        //super.modificar();
        
        try {
            this.cliente = new Cliente();
            BeanUtils.copyProperties(this.cliente, this.clienteSeleccionado);
            super.modificar();
            
        } catch (Exception e) {
            MensajesGenericos.errorCopyProperties();
        }
        //this.clientes=this.clienteServicio.obtenerTodos();
        
    }
    
    public void eliminar(){
        this.clienteServicio.eliminar(this.clienteSeleccionado.getCodCliente());
        this.clientes.remove(this.clienteSeleccionado);
        MensajesGenericos.infoEliminar(ENTIDAD, Integer.toString(this.clienteSeleccionado.getCodCliente()), Boolean.TRUE);
        super.sinSeleccion();
        
    }
    
    public void guardar(){
        try {
            if (super.getEnRegistro()) {
                this.clienteServicio.crear(this.cliente);
                this.clientes.add(this.cliente);
                
                MensajesGenericos.infoCrear(ENTIDAD, Integer.toString(this.clienteSeleccionado.getCodCliente()), Boolean.TRUE);
                super.sinSeleccion();
                cargarTabla();
                
            } else {
                this.clienteServicio.modificar(this.cliente);
                super.verDetalles();
                cargarTabla();
                MensajesGenericos.infoModificar(ENTIDAD, Integer.toString(this.clienteSeleccionado.getCodCliente()), Boolean.TRUE);
                super.seleccionadoUno();
            }
        } catch (Exception e) {
            MensajesGenericos.errorGuardar();
        }
        
        
    }
    
    public void cancelar(){
        if (super.getEnRegistro()) {
            super.sinSeleccion();
        } else {
            super.seleccionadoUno();
        }
        MensajesGenericos.infoCancelar();
    }

    public List<Cliente> getClientes() {
        return clientes;
    }

    public ClienteServicio getClienteServicio() {
        return clienteServicio;
    }

    public void setClienteServicio(ClienteServicio clienteServicio) {
        this.clienteServicio = clienteServicio;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Cliente getClienteSeleccionado() {
        return clienteSeleccionado;
    }

    public void setClienteSeleccionado(Cliente clienteSeleccionado) {
        this.clienteSeleccionado = clienteSeleccionado;
    }
    
    
    
    
    
    
    
}
